package com.mrx.example.dao;

import com.mrx.example.mapper.EmpMapper;
import com.mrx.example.model.Emp;
import com.mrx.example.model.Result;
import com.mrx.example.util.MyBatisUtils;

import java.util.List;

/**
 * Emp 表的 DAO
 *
 * @author Mr.X
 */
public class EmpDao extends BaseDao {
    /**
     * 构造一个 EmpDao, 初始化 sf
     */
    public EmpDao() {
        super(EmpMapper.class);
    }

    /**
     * 获取所有 Emp
     *
     * @return 查找到的 Emp
     */
    public Result<List<Emp>> findAllEmps() {
        List<Emp> res = getEmpMapper().findAllEmps();
        closeSession(true);
        if (res.size() > 0) {
            return Result.createResult(200, res);
        }
        return Result.createResult(-1, null);
    }

    /**
     * 使用 empID 查找 Emp
     *
     * @param id empID
     * @return 查找到的 Emp
     */
    public Result<Emp> findEmpById(String id) {
        Emp res = getEmpMapper().findEmpById(id);
        closeSession(true);
        if (res != null) {
            return Result.createResult(200, res);
        }
        return Result.createResult(-1, null);
    }

    /**
     * 使用 deptID 查找 其对应的 Emp
     *
     * @param dId deptID
     * @return 查找到的 Emp
     */
    public Result<List<Emp>> findEmpsByDeptId(String dId) {
        List<Emp> res = getEmpMapper().findEmpsByDeptId(Integer.parseInt(dId));
        closeSession(true);
        if (res.size() > 0) {
            return Result.createResult(200, res);
        }
        return Result.createResult(-1, null);
    }

    /**
     * 增加 Emp
     *
     * @param emp 要插入的 Emp
     * @return 插入结果
     */
    public Result<String> addEmp(Emp emp) {
        if (emp.hasNull()) {
            return Result.createResult(-1, "参数过少！");
        }
        try {
            if (!getEmpMapper().addEmp(emp)) {
                return Result.createResult(-1, "增加员工失败!");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.createResult(-1, "增加员工失败 : " + e.getMessage());
        }
        closeSession(true);
        return Result.createResult(200, "增加员工成功！");
    }

    /**
     * 更新 Emp
     *
     * @param emp 要更新的 Emp
     * @return 操作结果
     */
    public Result<String> updateEmp(Emp emp) {
        if (emp.hasNull()) {
            return Result.createResult(-1, "参数过少！");
        }
        try {
            if (!getEmpMapper().updateEmp(emp)) {
                return Result.createResult(-1, "更新员工失败!");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.createResult(-1, "更新员工失败 : " + e.getMessage());
        }
        closeSession(true);
        return Result.createResult(200, "更新员工成功！");
    }

    /**
     * 通过 ID 删除 Emp
     *
     * @param id 要删除的 Emp 的 ID
     * @return 操作结果
     */
    public Result<String> delEmp(String id) {
        try {
            if (!getEmpMapper().delEmpById(id)) {
                return Result.createResult(-1, "删除员工失败!");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.createResult(-1, "删除员工失败 : " + e.getMessage());
        }
        closeSession(true);
        return Result.createResult(200, "删除员工成功！");
    }

    /**
     * 获取 EmpMapper
     *
     * @return 获取到的 EmpMapper
     */
    private EmpMapper getEmpMapper() {
        return getMapper(EmpMapper.class);
    }
}
